package com.sh.demo.qa.util;

import java.lang.reflect.Method;
import java.text.SimpleDateFormat;

public class BeanUtil {

	/**
	 * 获取get方法
	 * 
	 * @param name get方法名
	 * @param cls
	 * @return
	 */
	public static Method getGetMethod(String name, Class<?> cls) {
		Method[] methods = cls.getMethods();
		for (Method method : methods) {
			String getMethodName = method.getName();
			if (getMethodName.equalsIgnoreCase("get" + name)) {
				return method;
			}
		}
		return null;
	}

	/**
	 * 获取set方法
	 * 
	 * @param name set方法名
	 * @param cls
	 * @return
	 */
	public static Method getSetMethod(String name, Class<?> cls) {
		Method[] methods = cls.getMethods();
		for (Method method : methods) {
			String getMethodName = method.getName();
			if (getMethodName.equalsIgnoreCase("set" + name)) {
				return method;
			}
		}
		return null;
	}

	/**
	 * 获取方法
	 * 
	 * @param name 方法名
	 * @param cls
	 * @return
	 */
	public static Method getMethod(String name, Class<?> cls) {
		Method[] methods = cls.getMethods();
		for (Method method : methods) {
			String getMethodName = method.getName();
			if (getMethodName.equals(name)) {
				return method;
			}
		}
		return null;
	}

	/**
	 * 根据传入类型转换数据类型
	 * 
	 * @param cls 变量类型
	 * @param obj invoke得到的值
	 * @return 返回变量
	 * @throws Exception
	 */
	public static Object getObject(Class<?> cls, Object obj) throws Exception {
		Object result = null;
		String str = cls.toString();
		if (obj == null)
			return null;
		if (str.indexOf("String") > -1) {
			result = obj.toString().trim();
		}
		if (str.indexOf("Integer") > -1 || str.indexOf("int") > -1) {
			result = Integer.valueOf(obj == null ? "0" : obj.toString().trim());
		}
		if (str.indexOf("Long") > -1 || str.indexOf("long") > -1) {
			result = Long.valueOf(obj == null ? "0" : obj.toString().trim());
		}
		if (str.indexOf("Double") > -1 || str.indexOf("double") > -1) {
			result = Double.valueOf(obj == null ? "0.0" : obj.toString().trim());
		}
		if (str.indexOf("Float") > -1 || str.indexOf("float") > -1) {
			result = Float.valueOf(obj == null ? "0.0" : obj.toString().trim());
		}
		if (str.indexOf("Boolean") > -1 || str.indexOf("boolean") > -1) {
			result = Boolean.valueOf(obj.toString().trim());
		}
		if (str.indexOf("Character") > -1 || str.indexOf("char") > -1) {
			result = (Character) obj;
		}
		if (str.indexOf("Date") > -1) {
			String dateStr = obj.toString();
			if (dateStr != null && !dateStr.equals("")) {
				int len = dateStr.length();
				if (len == 7) { // 年-月
					result = new SimpleDateFormat("yyyy-MM").parse(dateStr);
				} else if (len == 10 || len == 9 || len == 8) {
					result = new SimpleDateFormat("yyyy-MM-dd").parse(dateStr);
				} else {
					result = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(dateStr);
				}
			} else {
				result = null;
			}
		}
		return result;
	}

	public static String getString(Class<?> cls, Object obj) throws Exception {
		String result = null;
		String str = cls.toString();
		if (obj == null)
			return null;
		if (str.indexOf("String") > -1) {
			result = obj.toString();
		}
		else if (str.indexOf("Integer") > -1 || str.indexOf("int") > -1) {
			result = (obj == null ? "" : obj.toString());
		}
		else if (str.indexOf("Long") > -1 || str.indexOf("long") > -1) {
			result = (obj == null ? "" : obj.toString());
		}
		else if (str.indexOf("Double") > -1 || str.indexOf("double") > -1) {
			result = (obj == null ? "" : obj.toString());
		}
		else if (str.indexOf("Float") > -1 || str.indexOf("float") > -1) {
			result = (obj == null ? "" : obj.toString());
		}
		else if (str.indexOf("Boolean") > -1 || str.indexOf("boolean") > -1) {
			result = obj.toString();
		}
		else if (str.indexOf("Character") > -1 || str.indexOf("char") > -1) {
			result = obj.toString();
		}
		else if (str.indexOf("Date") > -1) {
			result = (obj == null ? "" : new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(obj));
		}
		// 其他类型
		else{
			result = obj.toString();
		}
		return result;
	}

}
